package my.set;

/**
 * <p>
 * 集合
 * </p>
 *
 * @author AJun
 * @since 2020/8/31
 */
@SuppressWarnings("unused")
public interface Set<E> {

    /**
     * 获取集合大小
     *
     * @return 集合大小
     */
    int size();

    /**
     * 判断集合是否为空
     *
     * @return true: 空; false: 不为空
     */
    boolean isEmpty();

    /**
     * 清空集合元素
     */
    void clear();

    /**
     * 判断集合是否包含指定元素
     *
     * @param element 元素
     * @return true: 包含; false: 不包含
     */
    boolean contains(E element);

    /**
     * 向集合添加指定元素
     *
     * @param element 元素
     */
    void add(E element);

    /**
     * 删除集合中的元素
     *
     * @param element 元素
     */
    void remove(E element);

    /**
     * 遍历集合
     *
     * @param visitor 遍历接口
     */
    void traversal(Visitor<E> visitor);

    /**
     * 提供给外界的遍历接口
     */
    abstract class Visitor<E> {
        boolean stop;

        public abstract boolean visit(E element);
    }

}
